package OptimalAlgorithm.TwoPointTechnique;
//给定一个数组 nums，编写一个函数将所有 0 移动到数组的末尾，同时保持非零元素的相对顺序。
//eg:
//输入: nums = [0,1,0,3,12]
//输出: [1,3,12,0,0]
public class MoveZeros {
    public void moveZeroes(int[] nums) {
/*        int dest = -1;
        int cur = 0;
        while (cur < nums.length){
            if(nums[cur] == 0){
                cur++;
            }else {
                dest++;
                swap(dest,cur,nums);
                cur++;//先交换后cur++
            }
        }*/
        for(int cur = 0,dest = -1;cur < nums.length;cur++){
            if(nums[cur] != 0){
                swap(++dest,cur,nums);
            }
        }
    }
    public void swap(int dest,int cur,int[] nums){
        int temp = nums[dest];
        nums[dest] = nums[cur];
        nums[cur] = temp;
    }
}
